/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */
package xmlaufgabe3;

import java.awt.BorderLayout;
import java.awt.Dimension;
import java.awt.GridLayout;
import java.util.ArrayList;
import javax.swing.JComponent;
import javax.swing.JFrame;
import javax.swing.JPanel;
import javax.swing.JSplitPane;

/**
 * Das Programm simuliert ein Depot mit mindestens 3 Konten. Dabei muessen in der
 * grafischen Oberflaeche Eingabemoeglichkeiten fuer jedes Konto sowie ein Protokollfenster
 * und ein Tortendiagramm dargestellt werden. Das Protokollfenster muss Transaktionen
 * in folgenden Format ausgeben: "Konto Nr. Nummer ----> Aktion: Wert Euro
 * am Datum um Zeit". Weiterhin muessen die Kontonummern aus der Matrikelnummer
 * plus einer Zahl (0,1,2,...) bestehen und in der Titelleiste muss der Name des
 * Studenten vorkommen. Zusaetzlich muessen fehlerhafte Eingaben abgefangen,
 * und die Konten duerfen nicht ueberzogen werden. Das Programm muss sich nach dem
 * Model View Controller Design Pattern richten und die Kommunikation zwischen
 * Model und Views muss mittels dem Observer Pattern erfolgen.
 * 
 * @author Adrian Cieluch
 * @version 1.0, 11/3/11
 */
public class AccountMain {

    private AccountMain(){};

    /**
     * Initialisiert die MVC Komponenten und erstellt einen Frame in den die Views
     * verteilt werden.
     * 
     * @param args Kommandozeilenargumente
     */
    public static void main(String[] args) {
        int width = 900, height = 400;
        String title = "Depot: Adrian Cieluch";
        int accountAmount = 3;
        
        //MVC
        ArrayList<AccountView> accountViews = new ArrayList<AccountView>();
        AccountModel model = new AccountModel(accountAmount);
        for(int i = 0; i < model.getAccountQuantity(); i++) {
            accountViews.add(new AccountView(model, i));
            model.addObserver(accountViews.get(i));
        }
        
        TransactionsView tv = new TransactionsView(model);
        PieChartView pcv = new PieChartView(model);
        model.addObserver(tv);
        model.addObserver(pcv);
        
        new InputController(accountViews, model);
        
        //Components
        JFrame frame = new JFrame();
        JSplitPane verticalPane = new JSplitPane(JSplitPane.VERTICAL_SPLIT);
        JSplitPane topContainer = new JSplitPane(JSplitPane.HORIZONTAL_SPLIT);
        JComponent bottomContainer = new JPanel();
        
        //Frame
        frame.setPreferredSize(new Dimension(width, height));
        frame.setMinimumSize(new Dimension(width, height));
        frame.setLocationRelativeTo(null);
        frame.setTitle(title);
        frame.setDefaultCloseOperation(frame.EXIT_ON_CLOSE);
        
        //Panes & Panels
        verticalPane.setTopComponent(topContainer);
        verticalPane.setBottomComponent(bottomContainer);
        topContainer.setLeftComponent(tv);
        topContainer.setRightComponent(pcv);
        
        bottomContainer.setLayout(new GridLayout(0, 3));
        for(int i = 0; i < accountViews.size(); i++) {
            bottomContainer.add(accountViews.get(i));
        }
        
        frame.add(verticalPane, BorderLayout.CENTER);
        frame.pack();
        frame.setVisible(true);

        topContainer.setDividerLocation(0.5);
        verticalPane.setDividerLocation(0.5);
    }
}
